var ds;// 数据源
var grid;// 数据显示表格
var searchForm;// 查询表单
var form;// 添加/修改的表单
var win;// 添加或修改窗口
var limit = 5;// 每页显示的记录数
var ptb;// 分页控件
var TopicRecord;// 记录对象

function getInsertForm() {

	form = new Ext.FormPanel({
		labelWidth : 100,
		monitorValid : true,// 把有formBind:true的按钮和验证绑定
		baseCls : 'x-plain',
		defaults : {
			width : 200
		},
		defaultType : 'textfield',// 默认字段类型

		// 定义表单元素
		items : [{
					fieldLabel : '姓名',
					name : 'login.uname',
					allowBlank : false
				}, {
					fieldLabel : '密码',
					name : 'login.upass'
				}],
		buttons : [{
			text : '保存',
			formBind : true,
			type : 'submit',
			// 定义表单提交事件
			handler : function() {
				if (form.form.isValid()) {// 验证合法后使用加载进度条
					// 提交到服务器操作
					form.form.doAction('submit', {
								url : '../loginHandler.do?action=addLogin',// 文件路径
								method : 'post',// 提交方法post或get
								params : '',
								// 提交成功的回调函数
								failure : function(retForm, retAction) {
									if (retAction.result
											&& retAction.result == '1') {
										Ext.MessageBox.alert('提示', '保存数据成功！');
										win.hide();
										
										var totalCount = ptb.store.getTotalCount();
										var pageSize = ptb.pageSize;
										var div = parseInt(totalCount/pageSize);
										var mol = totalCount%pageSize;
										ptb.cursor = div*pageSize;

										ds.load({
													params : {
														start : ptb.cursor,
														limit : ptb.pageSize
													}
												});

									} else if (retAction.result
											&& retAction.result == 'error') {
										Ext.MessageBox.alert('提示', '保存数据失败！');
									} else {
										Ext.Msg.alert('错误', '服务器出现错误请稍后再试！');
									}
								},
								waitMsg : '保存数据...'
							});
				}
			}
		}, {
			text : '取消',
			handler : function() {
				form.form.reset();
			}// 重置表单
		}]

	});
	return form;
}

function getUpdateForm() {

	form = new Ext.FormPanel({
		labelWidth : 100,
		monitorValid : true,// 把有formBind:true的按钮和验证绑定
		baseCls : 'x-plain',
		defaults : {
			width : 200
		},
		defaultType : 'textfield',// 默认字段类型

		// 定义表单元素
		items : [{
					fieldLabel : 'ID',
					name : 'login.uid',
					allowBlank : false,
					readOnly:true
				},{
					fieldLabel : '姓名',
					name : 'login.uname',
					allowBlank : false
				}, {
					fieldLabel : '密码',
					name : 'login.upass'
				}],
		buttons : [{
			text : '保存',
			formBind : true,
			type : 'submit',
			// 定义表单提交事件
			handler : function() {
				if (form.form.isValid()) {// 验证合法后使用加载进度条
					// 提交到服务器操作
					form.form.doAction('submit', {
								url : '../loginHandler.do?action=editLogin',// 文件路径
								method : 'post',// 提交方法post或get
								params : '',
								// 提交成功的回调函数
								failure : function(retForm, retAction) {
									if (retAction.result
											&& retAction.result == '1') {
										Ext.MessageBox.alert('提示', '修改数据成功！');
										win.hide();
										ds.load({
													params : {
														start : ptb.cursor,
														limit : ptb.pageSize
													}
												});

									} else if (retAction.result
											&& retAction.result == 'error') {
										Ext.MessageBox.alert('提示', '保存数据失败！');
									} else {
										Ext.Msg.alert('错误', '服务器出现错误请稍后再试！');
									}
								},
								waitMsg : '保存数据...'
							});
				}
			}
		}, {
			text : '取消',
			handler : function() {
				form.form.reset();
			}// 重置表单
		}]

	});
	return form;
}

// 页面加载后执行的代码
Ext.onReady(function() {
		Ext.QuickTips.init();// 浮动信息提示
			Ext.BLANK_IMAGE_URL = '../resources/images/default/s.gif';// 替换图片文件地址为本地
							initData();
					
		});

// 初始化数据
function initData() {
	if (!searchForm) {
		searchForm = new Ext.FormPanel({
					renderTo : document.body,
					labelAlign : 'left',
					buttonAlign : 'right',
					bodyStyle : 'padding:5px',
					width : 800,
					frame : true,
					labelWidth : 80,
					monitorValid : true,// 把有formBind:true的按钮和验证绑定
					title : "查询用户信息",
					items : [{
								layout : 'column',// columnlayout
								border : false,// 没有边框
								labelSeparator : '：',// 标题的分隔符号我们用中文冒号代替英文的冒号（labelSeparator:'：'）。
								// coulmnLayout里的控件将定义在items里
								items : [{
											columnWidth : .5,// 在加入性别的radio控件时就要注意了，这里需要加入两个radio，第一radio是有标题的，第二是没有的，而且两个radio加起来的宽度应该正好是余下的列宽（50%）
											layout : 'form',
											border : false,
											items : [{
														xtype : 'textfield',// 在formlayout里有一个类型为textfield'（xtype:'textfield'）的输入控件
														fieldLabel : '姓名',// 控件标题为姓名
														name : 'uname',// 输入框（input）的name属性设置“uname”
														anchor : '90%'// 输入框的长度为列宽减去标题的宽度后的90%（anchor:'90%'），余下的10%的是给显示错误信息图标用的。
													}]
										}, {
											columnWidth : .5,// 在加入性别的radio控件时就要注意了，这里需要加入两个radio，第一radio是有标题的，第二是没有的，而且两个radio加起来的宽度应该正好是余下的列宽（50%）
											layout : 'form',
											border : false,
											// coulmnLayout里的控件将定义在items里
											items : [{
														xtype : 'datefield',// 在formlayout里有一个类型为textfield'（xtype:'textfield'）的输入控件
														fieldLabel : '注册日期',// 控件标题为姓名
														name : 'regtime',// 输入框（input）的name属性设置“uname”
														anchor : '90%'// 输入框的长度为列宽减去标题的宽度后的90%（anchor:'90%'），余下的10%的是给显示错误信息图标用的。
													}]
										}

								]
							}],
					buttons : [{
								text : "确定",
								handler : query,
								formBind : true
							}, {
								text : "取消",
								handler : reset
							}]
				});
	}
	function query() {
		// 这里是关键，重新载入数据源，并把搜索表单值提交
		ds.load({
					params : {
						start : 0,
						limit : ptb.getPageSize(),
						'loginCond.uname' : Ext.get('uname').dom.value
						// 'cond.areaId' : Ext.get('regtime').dom.value
						// 取得搜索表单文本域的值，发送到服务端
					}
				})

	}
	function reset() {
		searchForm.form.reset();
	}
	ds = new Ext.data.Store({
				// proxy: new Ext.data.MemoryProxy(jsondata),
				proxy : new Ext.data.HttpProxy({
							url : '../loginSearch.do'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'uid'
								}, {
									name : 'uname'
								}, {
									name : 'upass'
								}])
			});
	ds.load({
				params : {
					start : 0,
					limit : limit
				}
			});
	initGrid();
}
// 初始化显示表格
function initGrid() {
	if (!win) {
		win = new Ext.Window({
					el : 'add-window',
					layout : 'fit', // 布局方式fit，自适应布局
					width : 350,
					height : 200,
					modal : true,
					plain : true,
					bodyStyle : 'padding:5px;',
					maximizable : false,// 禁止最大化
					closable : true,// 禁止关闭
					collapsible : true,// 可折叠
					buttonAlign : 'center',
					closeAction : 'hide'

				});
	}
	var sm = new Ext.grid.CheckboxSelectionModel();

	var cm = new Ext.grid.ColumnModel([sm, {
				id : 'uid',
				header : "用户编号",
				width : 50,
				sortable : true,
				dataIndex : 'uid'
			}, {
				header : "用户姓名",
				width : 50,
				sortable : true,
				dataIndex : 'uname'
			}, {
				header : "用户密码",
				width : 50,
				sortable : true,
				dataIndex : 'upass'
			}]);
	// 定义一个完整的记录对象
	TopicRecord = Ext.data.Record.create([{
				name : 'uid',
				mapping : 'login.uid'
			}, {
				name : 'uname',
				mapping : 'login.uname'
			}, {
				name : 'upass',
				mapping : 'login.upass'
			}]);
	// 工具栏对象
	ptb = new Ext.PagingToolbar({
				plugins : new Ext.ux.Andrie.pPageSize(),
				pageSize : limit,
				store : ds,
				displayInfo : true,
				displayMsg : '显示第 {0} 条到 {1} 条记录，一共 {2} 条',
				emptyMsg : "对不起，查询记录为空!"
			});
	// 表格对象
	grid = new Ext.grid.GridPanel({
		id : 'button-grid',
		border : false,
		buttonAlign : 'right',
		ds : ds,
		cm : cm,
		sm : sm,
		stripeRows : true,
		loadMask : true,
		viewConfig : {
			forceFit : true
		},

		// inline toolbars
		tbar : [{
					id : 'userAddBtn',
					text : '增加',
					tooltip : '增加一条用户信息',
					iconCls : 'add',
					onClick : function() {
						// update form to insert form
						win.setTitle('添加用户信息');
						form = getInsertForm();
						var items = new Ext.util.MixedCollection();
						items.add("form", form);
						win.items = items;
						win.show();
					}
				}, '-', {
					id : 'userEditBtn',
					text : '编辑',
					tooltip : '修改一条用户信息',
					iconCls : 'option',
					onClick : function() {
						if (sm.getCount() == 1) {
							// update form to edit form
							win.setTitle('编辑用户信息');
							form = getUpdateForm();
							var items = new Ext.util.MixedCollection();
							items.add("form", form);
							win.items = items;
							win.show();

							var uid = sm.getSelected().data.uid;
							loginService.findById(uid, callback);
							function callback(data) {
								// 列表影射,columnModelvar
								var myNewRecord = new TopicRecord({
											'login.uid' : data.uid,
											'login.uname' : data.uname,
											'login.upass' : data.upass
										});
								// 实际的一条记录
								form.getForm().loadRecord(myNewRecord);

							}
						} else {
							Ext.MessageBox.alert('提示', '请选择一条记录！');
						}
					}
				}, '-', {
					id : 'userDelBtn',
					text : '删除',
					tooltip : '删除选择的用户信息',
					iconCls : 'remove',
					onClick : function() {
						if (sm.hasSelection()) {
							Ext.MessageBox.confirm('提示', '你确定要删除这些用户信息么?',
									function(button) {
										if (button == 'yes') {
											var list = sm.getSelections();
											var rList = [];
											for (var i = 0; i < list.length; i++) {
												rList[i] = list[i].data["uid"];
											}
											loginService.delLogin(rList,
													function(data) {
														if (data > 0) {
															Ext.MessageBox
																	.alert(
																			'提示',
																			"删除"
																					+ data
																					+ '条数据成功!');
															// 如果把当页数据删除完毕，则跳转到上一页！
															if (data == ptb.store
																	.getTotalCount()
																	- ptb.cursor) {
																ptb.cursor = ptb.cursor
																		- ptb.pageSize;
															}
															ds.load({
																params : {
																	start : ptb.cursor,
																	limit : ptb.pageSize
																}
															});

														} else if(data==0){
															Ext.MessageBox
																	.alert(
																			'提示',
																			"删除数据失败!");
														}else if(data<0){
															Ext.MessageBox
																	.alert(
																			'提示',
																			"删除数据失败,请先删除与该用户关联的其它对象!");
														}
													});
										}
									});
						} else {
							Ext.MessageBox.alert('提示', "请至少选择一条记录!");
						}
					}
				}, '-', {
					id : 'userRefreshBtn',
					text : '刷新',
					tooltip : '刷新用户信息',
					iconCls : 'refresh',
					onClick : function() {
						ds.load({
									params : {
										start : ptb.cursor,
										limit : ptb.pageSize
									}
								});
					}

				}, '-', {
					id : 'userCopyBtn',
					text : '复制',
					tooltip : '复制添加选择的用户信息',
					iconCls : 'copy',
					onClick : function() {
						if (sm.getCount() == 1) {
							// update form to edit form
							form = getInsertForm();
							var items = new Ext.util.MixedCollection();
							items.add("form", form);
							win.items = items;
							win.show();

							var hid = sm.getSelected().data.hid;
							userService.findById(hid, callback);
							function callback(data) {
								// 列表影射,columnModelvar
								var myNewRecord = new TopicRecord({
											'user.hid' : data.hid,
											'user.title' : data.title,
											'user.hireprice' : data.hireprice,
											'user.linkman' : data.linkman,
											'user.linktel' : data.linktel,
											'user.room' : data.room,
											'user.ting' : data.ting,
											'user.areaId' : data.areaId,
											'user.streetId' : data.streetId,
											'user.userthing' : data.userthing
										});

								userService.getAllStreets(data.areaId,
										function(data) {
											if (data != null) {
												var list2 = [];
												for (var i = 0; i < data.length; i++) {
													list2[i] = [data[i].sid,
															data[i].sname];
												}
												Ext.getCmp('child_id1')
														.clearValue();
												Ext.getCmp('child_id1').store
														.loadData(list2);
												// 实际的一条记录
												form
														.getForm()
														.loadRecord(myNewRecord);
											}
										});

							}
						} else {
							Ext.MessageBox.alert('提示', "请选择一条记录!");
						}
					}

				}, '-', {
					id : 'userImportBtn',
					text : '导入',
					tooltip : '批量导入用户信息',
					iconCls : 'import',
					onClick : function() {
					}

				}, '-', {
					id : 'userExportExcelBtn',
					text : '导出Excel',
					tooltip : '导出用户信息',
					iconCls : 'export',
					onClick : function() {
						window.location = "../userExport.do?type=excel&start="
								+ ptb.cursor + "&limit=" + ptb.pageSize;
					}
				}, '-', {
					id : 'userExportPdfBtn',
					text : '导出Pdf',
					tooltip : '导出用户信息',
					iconCls : 'export',
					onClick : function() {
						window.location = "../userExport.do?type=pdf&start="
								+ ptb.cursor + "&limit=" + ptb.pageSize;
					}
				}, '-', {
					id : 'userPrintBtn',
					text : '打印',
					tooltip : '打印用户信息',
					iconCls : 'print',
					onClick : function() {
						// 利用IE的简单打印
						self.print();
					}
				}, '-', {
					id : 'userDetailBtn',
					text : '详情',
					tooltip : '查看所选用户信息详情',
					iconCls : 'details',
					onClick : function() {
						Ext.MessageBox.alert("详细", '舞动绚丽的ExtJS吧！');
						Ext.alert(333);
					}
				}],
		bbar : ptb,
		width : 800,
		autoHeight : true,
		// height : 250,
		frame : true,
		title : '用户信息列表',
		// layout:'fit',
		iconCls : 'icon-grid',
		renderTo : document.body
	});
	grid.on('rowcontextmenu', rightClickFn);// 右键菜单代码关键部分
	var rightClick = new Ext.menu.Menu({
				id : 'rightClickCont',
				items : [{
							id : 'rMenu1',
							handler : Ext.getCmp('userAddBtn').onClick,// 点击后触发的事件
							text : '添加信息'
						}, {
							id : 'rMenu2',
							handler : Ext.getCmp('userEditBtn').onClick,
							text : '编辑信息'
						}, {
							id : 'rMenu3',
							handler : Ext.getCmp('userDelBtn').onClick,// 点击后触发的事件
							text : '删除信息'
						}, {
							id : 'rMenu4',
							handler : Ext.getCmp('userRefreshBtn').onClick,
							text : '刷新数据'
						}, {
							id : 'rMenu5',
							handler : Ext.getCmp('userCopyBtn').onClick,// 点击后触发的事件
							text : '复制数据'
						}, {
							id : 'rMenu6',
							handler : Ext.getCmp('userImportBtn').onClick,
							text : '导入数据'
						}, {
							id : 'rMenu7',
							handler : Ext.getCmp('userExportExcelBtn').onClick,// 点击后触发的事件
							text : '导出EXCEL数据'
						}, {
							id : 'rMenu8',
							handler : Ext.getCmp('userExportPdfBtn').onClick,
							text : '导出PDF数据'
						}, {
							id : 'rMenu9',
							handler : Ext.getCmp('userPrintBtn').onClick,// 点击后触发的事件
							text : '打印数据'
						}, {
							id : 'rMenu10',
							handler : Ext.getCmp('userDetailBtn').onClick,
							text : '查看详情'
						}]
			});

	function rightClickFn(grid, rowindex, e) {
		e.preventDefault();
		rightClick.showAt(e.getXY());
	}
	// function rMenuFnAdd() {
	// Ext.getCmp('userAddBtn').onClick;
	// }
	// function rMenuFnEdit() {
	//		
	// }
	// function rMenuFnDel() {
	//		
	// }
	// function rMenuFnRefresh() {
	//		
	// }
	// function rMenuFnCopy() {
	// alert(Ext.getCmp('userCopyBtn').onClick);
	// return Ext.getCmp('userCopyBtn').onClick;
	// }
	// function rMenuFnImport() {
	//		
	// }
	// function rMenuFnExportExcel() {
	//		
	// }
	// function rMenuFnExcelPdf() {
	//		
	// }
	// function rMenuFnPrint() {
	//		
	// }
	// function rMenuFnDetail() {
	// return Ext.getCmp('userDetailBtn').onClick;
	// }

}

// 扩展extjs的验证！
Ext.apply(Ext.form.VTypes, {
	// 固定电话、传真
	phone : function(v) {
		var r = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;
		return r.test(v);
	},
	// 移动电话
	mobile : function(v) {
		var r = /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/;
		return r.test(v);
	},
	// 邮政编码
	zip : function(v) {
		var r = /^[1-9]\d{5}$/;
		return r.test(v);
	},
	// 搜索关键字过滤
	search : function(v) {
		var r = /^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]*$/;
		return r.test(v);
	},
	// 简体中文
	chinese : function(v) {
		var r = /^[\u0391-\uFFE5]+$/;
		return r.test(v);
	},
	// 非中文
	noChinese : function(v) {
		var r = /^^[\u0391-\uFFE5]+$/;
		return r.test(v);
	},
	// 货币
	currency : function(v) {
		var r = /^\d+(\.\d+)?$/;
		return r.test(v);
	},
	// QQ
	qq : function(v) {
		var r = /^[1-9]\d{4,8}$/;
		return r.test(v);
	},
	// 实数
	double : function(v) {
		var r = /^[-\+]?\d+(\.\d+)?$/;
		return r.test(v);
	},
	// 安全密码
	safe : function(v) {
		var r = /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/;
		return !r.test(v);
	},
	phoneText : '请输入正确的电话或传真号码!<br />格式如：0000-XXXXXXXX',
	mobileText : '请输入正确的移动电话号码!<br />格式如：13XXXXXXXXX',
	zipText : '请输入正确的邮政编码!',
	searchText : '请不要输入非法的搜索字符!',
	chineseText : '您只能在这里输入中文字符!',
	noChineseText : '您不能在这里输入中文字符!',
	currencyText : '请输入货币值!<br />格式如：1.00',
	qqText : '请输入合法的QQ号码!',
	doubleText : '请输入实数值,可带+/-号!',
	safeText : '请输入足够安全的字符,包含英文和数字货其他字符!'
});